package com.demo.security.access;

import java.util.Collection;

import org.springframework.security.core.Authentication;

/**
 * 方法调用的后置逻辑处理管理器
 * 提供指定方法访问后的一些逻辑处理。
 * 依赖于SpringSecurity
 * 
 * @author ryuu.kk
 */
public interface AfterLogicManager {
	/**
	 * 访问方法的后置逻辑处理
	 * 
	 * @param authentication 权限
	 * @param object 访问对象
	 * @param logicAttributes 访问属性对象
	 * @param returnObject 返回的结果
	 * @return 访问对象
	 */
	Object access(Authentication authentication, Object object, Collection<LogicAttribute> logicAttributes, Object returnObject);
	
	/**
	 * 该方法是否支持逻辑属性
	 * @param attribute LogicAttribute
	 * @return boolean
	 */
    boolean supports(LogicAttribute attribute);
    
	/**
	 * 该方法是否支持逻辑属性
	 * @param clazz Class<?> (LogicAttribute)
	 * @return boolean
	 */
    boolean supports(Class<?> clazz);
}